package top.xia17.plugins.fast.common.utils;

import cn.hutool.core.util.StrUtil;

import java.util.HashMap;
import java.util.Map;

/**
 * map工具类
 *
 * @author xia17
 * @date 2022/3/15
 */
public class MapUtil {


    /**
     * 删除key的前缀
     *
     * @param data   数据
     * @param prefix 前缀
     * @return 返回新的map
     */
    public static Map<String, Object> delPrefix(Map<String, Object> data, String prefix) {
        if (isEmpty(data)) {
            return data;
        }
        HashMap<String, Object> res = new HashMap<>(data.size() * 2);
        data.forEach((k, v) -> {
            if (StrUtil.isBlank(k)) {
                res.put(k, v);
                return;
            }
            // 去除前缀
            res.put(k.replaceFirst(prefix, ""), v);
        });
        return res;
    }

    /**
     * 删除key的前缀并下划线转驼峰
     *
     * @param data   数据
     * @param prefix 前缀
     * @return 返回新的map
     */
    public static Map<String, Object> delPrefixAndToCamelCase(Map<String, Object> data, String prefix) {
        if (isEmpty(data)) {
            return data;
        }
        HashMap<String, Object> res = new HashMap<>(data.size() * 2);
        data.forEach((k, v) -> {
            if (StrUtil.isBlank(k)) {
                res.put(k, v);
                return;
            }
            // 去除前缀
            String key = k.replaceFirst(prefix, "");
            // 下划线转驼峰
            res.put(StrUtil.toCamelCase(key), v);
        });
        return res;
    }

    /**
     * 下划线转驼峰
     *
     * @param data   数据
     * @param prefix 前缀
     * @return 返回新的map
     */
    public static Map<String, Object> toCamelCase(Map<String, Object> data, String prefix) {
        if (isEmpty(data)) {
            return data;
        }
        HashMap<String, Object> res = new HashMap<>(data.size() * 2);
        data.forEach((k, v) -> {
            if (StrUtil.isBlank(k)) {
                res.put(k, v);
                return;
            }
            res.put(StrUtil.toCamelCase(k), v);
        });
        return res;
    }


    /**
     * 是否是空的map
     *
     * @param map map
     * @return 空返回true
     */
    public static boolean isEmpty(Map<?, ?> map) {
        return cn.hutool.core.map.MapUtil.isEmpty(map);
    }


}
